home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / raytrace / rayshade / graphtal.lzh / Graphtal.Amiga / yacc.C < prev    next >
C/C++ Source or Header  |  1992-11-20  |  66KB  |  2,121 lines

  1.  
  2. /*  A Bison parser, made from yacc.y  */
  3.  
  4. #define YYBISON 1  /* Identify Bison output.  */
  5.  
  6. #define    tVALUE    258
  7. #define    tNAME    259
  8. #define    tCONSTANT    260
  9. #define    tLSYSTEM    261
  10. #define    tTABLE    262
  11. #define    tCONST    263
  12. #define    tATTRIBUTES    264
  13. #define    tDERIVATION    265
  14. #define    tAXIOM    266
  15. #define    tPITCH    267
  16. #define    tROLL    268
  17. #define    tTURN    269
  18. #define    tANGLE    270
  19. #define    tFORWARD    271
  20. #define    tRANDOMIZE    272
  21. #define    tINFINITY    273
  22. #define    tTROPISM    274
  23. #define    tWEIGHT    275
  24. #define    tEYE    276
  25. #define    tLOOKAT    277
  26. #define    tUP    278
  27. #define    tFOV    279
  28. #define    tCONERES    280
  29. #define    tSPHERERES    281
  30. #define    tHULL    282
  31. #define    tSPHERE    283
  32. #define    tTRIANGLE    284
  33. #define    tPLANE    285
  34. #define    tCYLINDER    286
  35. #define    tCONE    287
  36. #define    tTRANSLATE    288
  37. #define    tROTATE    289
  38. #define    tSCALE    290
  39. #define    tTRANSFORM    291
  40. #define    tSIN    292
  41. #define    tCOS    293
  42. #define    tTAN    294
  43. #define    tASIN    295
  44. #define    tACOS    296
  45. #define    tATAN    297
  46. #define    tABS    298
  47. #define    tSQRT    299
  48. #define    tEXP    300
  49. #define    tLOG    301
  50. #define    tLOG10    302
  51. #define    tRAND    303
  52. #define    tGAUSS    304
  53. #define    tIF    305
  54. #define    tTURTLEX    306
  55. #define    tTURTLEY    307
  56. #define    tTURTLEZ    308
  57. #define    tSCOPE    309
  58. #define    tAND    310
  59. #define    tOR    311
  60. #define    tEQ    312
  61. #define    tNEQ    313
  62. #define    tGEQ    314
  63. #define    tLEQ    315
  64. #define    tARROW    316
  65. #define    tPOW    317
  66. #define    tUMINUS    318
  67.  
  68. #line 1 "yacc.y"
  69.  
  70. /*
  71.  * yacc.y - parser for graphtal.
  72.  *
  73.  * Copyright (C) 1992, Christoph Streit (streit@iam.unibe.ch)
  74.  *                     University of Berne, Switzerland
  75.  * All rights reserved.
  76.  *
  77.  * This software may be freely copied, modified, and redistributed
  78.  * provided that this copyright notice is preserved on all copies.
  79.  *
  80.  * You may not distribute this software, in whole or in part, as part of
  81.  * any commercial product without the express consent of the authors.
  82.  *
  83.  * There is no warranty or other guarantee of fitness of this software
  84.  * for any purpose.  It is provided solely "as is".
  85.  *
  86.  */
  87.  
  88. /*
  89.  * #ifdef _AIX
  90.  *   #pragma alloca
  91.  * # include <malloc.h>
  92.  * # include <unistd.h>
  93.  * #else
  94.  */
  95. #ifdef __GNUC__
  96. # include <osfcn.h>
  97. #else
  98. # include <unistd.h>
  99. # ifndef alloca
  100. #  include <malloc.h>
  101. #  ifndef alloca
  102. #   define alloca
  103. #  endif
  104. # endif
  105. #endif
  106.  
  107. /*
  108.  * #endif
  109.  */
  110.  
  111. #include <stdlib.h>
  112. #include <iostream.h>
  113.  
  114. #include "yyerror.h"
  115. #include "rcString.h"
  116. #include "LSystem.h"
  117. #include "Expression.h"
  118. #include "ExprItems.h"
  119. #include "table.h"
  120. #include "Color.h"
  121. #include "Options.h"
  122. #include "Primitives.h"
  123. #include "Hull.h"
  124. #include "Interpreter.h"
  125.  
  126. extern int yylex();
  127.  
  128. LSystem* lsystem = NULL;
  129.  
  130. declareTable(ExprSymtab, rcString, ExpressionPtr);
  131. implementTable(ExprSymtab, rcString, ExpressionPtr);
  132.  
  133. declareTable(IntSymtab, rcString, int);
  134. implementTable(IntSymtab, rcString, int);
  135.  
  136. declareTable(TableSymtab, rcString, TablePtr)
  137. implementTable(TableSymtab, rcString, TablePtr)
  138.  
  139. static ExprSymtab  GlobalConst(503);
  140. static ExprSymtab* LocalConst = new ExprSymtab(503);
  141. static IntSymtab*  FormalParam = new IntSymtab(17);
  142. static HullSymtab* theHulls = new HullSymtab(17);
  143. static TableSymtab theTables(17);
  144.  
  145. static int definingLocalConst = 0;
  146. static int nthParam = 0;
  147. static ProdModuleList* axiom = NULL;
  148. static DerivationList* derivation = NULL;
  149.  
  150. #line 83 "yacc.y"
  151. typedef union { double realnumber;
  152.      int intnumber;
  153.  
  154.      Vector* vector;
  155.      TransMatrix* trans;
  156.      GeoObject* geoObject;
  157.      Hull* hull;
  158.          DerivationList* derivations;
  159.      TableList* table_list;
  160.      Table* table;
  161.      ProductionList* prod_list;
  162.          Production* production;
  163.      Predecessor* predecessor;
  164.      NameList* name_list;
  165.      SuccessorList* succ_list;
  166.          Successor* successor;
  167.      ProdModuleList* module_list;
  168.      ProdModule* module;
  169.  
  170.      ExpressionList* expr_list;
  171.          Expression* expr;
  172.          Value* value;
  173.      rcString* name;
  174.        } YYSTYPE;
  175.  
  176. #ifndef YYLTYPE
  177. typedef
  178.   struct yyltype
  179.     {
  180.       int timestamp;
  181.       int first_line;
  182.       int first_column;
  183.       int last_line;
  184.       int last_column;
  185.       char *text;
  186.    }
  187.   yyltype;
  188.  
  189. #define YYLTYPE yyltype
  190. #endif
  191.  
  192. #ifndef YYDEBUG
  193. #define YYDEBUG 1
  194. #endif
  195.  
  196. #include <stdio.h>
  197.  
  198. #ifndef __STDC__
  199. #define const
  200. #endif
  201.  
  202.  
  203.  
  204. #define    YYFINAL        303
  205. #define    YYFLAG        -32768
  206. #define    YYNTBASE    88
  207.  
  208. #define YYTRANSLATE(x) ((unsigned)(x) <= 318 ? yytranslate[x] : 126)
  209.  
  210. static const char yytranslate[] = {     0,
  211.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  212.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  213.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  214.      2,     2,    57,     2,     2,    81,    70,    78,     2,    83,
  215.     86,    68,    66,    84,    67,    82,    69,     2,     2,     2,
  216.      2,     2,     2,     2,     2,     2,     2,    85,    87,    62,
  217.     73,    63,     2,     2,     2,     2,     2,     2,     2,     2,
  218.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  219.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  220.     76,    79,    77,    71,     2,     2,     2,     2,     2,     2,
  221.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  222.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  223.      2,     2,    74,    80,    75,     2,     2,     2,     2,     2,
  224.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  225.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  226.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  227.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  228.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  229.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  230.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  231.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  232.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  233.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  234.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  235.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  236.      2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
  237.      6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
  238.     16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
  239.     26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
  240.     36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
  241.     46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
  242.     56,    58,    59,    60,    61,    64,    65,    72
  243. };
  244.  
  245. #if YYDEBUG != 0
  246. static const short yyprhs[] = {     0,
  247.      0,     8,    10,    11,    14,    16,    19,    24,    25,    28,
  248.     35,    37,    40,    43,    47,    51,    56,    60,    65,    71,
  249.     75,    77,    80,    83,    85,    87,    90,    93,    98,   102,
  250.    107,   113,   115,   118,   126,   128,   131,   135,   140,   142,
  251.    145,   147,   149,   151,   153,   155,   157,   159,   161,   163,
  252.    165,   167,   169,   171,   173,   175,   179,   181,   185,   188,
  253.    190,   193,   197,   200,   201,   205,   207,   210,   212,   217,
  254.    219,   223,   225,   227,   229,   231,   233,   236,   240,   244,
  255.    248,   252,   256,   260,   264,   268,   271,   275,   279,   283,
  256.    287,   291,   295,   299,   302,   305,   308,   311,   314,   317,
  257.    320,   323,   326,   329,   332,   335,   338,   341,   350,   353,
  258.    358,   362,   365,   369,   375,   376,   379,   383,   387,   391,
  259.    395,   399,   403,   407,   410,   414,   422,   426,   434,   442,
  260.    450,   454,   458,   462,   465,   470,   471,   475,   479,   481
  261. };
  262.  
  263. #endif
  264.  
  265. static const short yyrhs[] = {     6,
  266.      4,   124,    89,    93,   101,   119,     0,    90,     0,     0,
  267.      8,    91,     0,    92,     0,    91,    92,     0,     5,    73,
  268.    116,   124,     0,     0,    93,    94,     0,    27,     4,    74,
  269.     95,    75,   124,     0,    96,     0,    96,    99,     0,    95,
  270.     96,     0,    95,    96,    99,     0,    28,    98,    97,     0,
  271.     29,    97,    97,    97,     0,    30,    97,    97,     0,    31,
  272.     98,    97,    97,     0,    32,    98,    97,    98,    97,     0,
  273.     98,    98,    98,     0,     3,     0,    67,     3,     0,    66,
  274.      3,     0,     4,     0,   100,     0,    99,   100,     0,    33,
  275.     97,     0,    35,    98,    98,    98,     0,    34,    97,    98,
  276.      0,    36,    97,    97,    97,     0,    36,    97,    97,    97,
  277.     97,     0,   102,     0,   101,   102,     0,     7,     4,    74,
  278.     90,   103,    75,   124,     0,   104,     0,   103,   104,     0,
  279.    105,   110,   124,     0,   105,   109,   110,   124,     0,   106,
  280.      0,   106,   107,     0,    74,     0,    75,     0,    76,     0,
  281.     77,     0,    71,     0,    78,     0,    66,     0,    67,     0,
  282.     79,     0,    69,     0,    80,     0,    81,     0,    82,     0,
  283.     70,     0,     4,     0,    83,   108,   125,     0,     4,     0,
  284.    108,    84,     4,     0,    85,   116,     0,   111,     0,   110,
  285.    111,     0,    64,   112,   113,     0,    64,   112,     0,     0,
  286.     83,     3,    86,     0,   114,     0,   113,   114,     0,   106,
  287.      0,   106,    83,   115,   125,     0,   116,     0,   115,    84,
  288.    116,     0,     3,     0,    51,     0,    52,     0,    53,     0,
  289.      4,     0,    54,     4,     0,   116,    56,   116,     0,   116,
  290.     55,   116,     0,   116,    58,   116,     0,   116,    59,   116,
  291.      0,   116,    60,   116,     0,   116,    61,   116,     0,   116,
  292.     63,   116,     0,   116,    62,   116,     0,    57,   116,     0,
  293.    116,    66,   116,     0,   116,    67,   116,     0,   116,    68,
  294.    116,     0,   116,    69,   116,     0,   116,    70,   116,     0,
  295.    116,    65,   116,     0,   116,    71,   116,     0,    67,   116,
  296.      0,    37,   118,     0,    38,   118,     0,    39,   118,     0,
  297.     40,   118,     0,    41,   118,     0,    42,   118,     0,    43,
  298.    118,     0,    44,   118,     0,    45,   118,     0,    46,   118,
  299.      0,    47,   118,     0,    48,   117,     0,    49,   117,     0,
  300.     50,    83,   116,    84,   116,    84,   116,   125,     0,     4,
  301.    117,     0,     4,    83,   115,   125,     0,    83,   116,   125,
  302.      0,    83,   125,     0,    83,   116,   125,     0,     9,    74,
  303.    120,    75,   124,     0,     0,   120,   121,     0,    10,   122,
  304.    124,     0,    11,   113,   124,     0,    12,   116,   124,     0,
  305.     13,   116,   124,     0,    14,   116,   124,     0,    15,   116,
  306.    124,     0,    16,   116,   124,     0,    17,   124,     0,    17,
  307.    116,   124,     0,    19,   116,    84,   116,    84,   116,   124,
  308.      0,    20,   116,   124,     0,    21,   116,    84,   116,    84,
  309.    116,   124,     0,    22,   116,    84,   116,    84,   116,   124,
  310.      0,    23,   116,    84,   116,    84,   116,   124,     0,    24,
  311.    116,   124,     0,    25,     3,   124,     0,    26,     3,   124,
  312.      0,     4,   123,     0,   122,    84,     4,   123,     0,     0,
  313.     83,   116,   125,     0,    83,    18,   125,     0,    87,     0,
  314.     86,     0
  315. };
  316.  
  317. #if YYDEBUG != 0
  318. static const short yyrline[] = { 0,
  319.    172,   185,   189,   190,   193,   194,   197,   211,   212,   215,
  320.    223,   228,   236,   241,   251,   258,   267,   275,   283,   293,
  321.    299,   304,   310,   315,   328,   332,   340,   346,   351,   357,
  322.    364,   374,   379,   386,   402,   408,   416,   425,   436,   441,
  323.    448,   450,   452,   454,   456,   458,   460,   462,   464,   466,
  324.    468,   470,   472,   474,   476,   480,   484,   493,   504,   508,
  325.    513,   520,   524,   530,   531,   536,   541,   548,   553,   560,
  326.    565,   572,   575,   579,   582,   585,   605,   616,   618,   620,
  327.    622,   624,   626,   628,   630,   632,   635,   637,   639,   641,
  328.    643,   645,   647,   649,   652,   654,   656,   658,   660,   662,
  329.    664,   666,   668,   670,   672,   674,   676,   678,   680,   684,
  330.    688,   692,   695,   699,   702,   703,   706,   708,   710,   715,
  331.    719,   724,   731,   736,   755,   760,   766,   770,   777,   784,
  332.    790,   795,   800,   807,   818,   831,   833,   837,   841,   842
  333. };
  334.  
  335. static const char * const yytname[] = {   "$","error","$illegal.","tVALUE","tNAME",
  336. "tCONSTANT","tLSYSTEM","tTABLE","tCONST","tATTRIBUTES","tDERIVATION","tAXIOM",
  337. "tPITCH","tROLL","tTURN","tANGLE","tFORWARD","tRANDOMIZE","tINFINITY","tTROPISM",
  338. "tWEIGHT","tEYE","tLOOKAT","tUP","tFOV","tCONERES","tSPHERERES","tHULL","tSPHERE",
  339. "tTRIANGLE","tPLANE","tCYLINDER","tCONE","tTRANSLATE","tROTATE","tSCALE","tTRANSFORM",
  340. "tSIN","tCOS","tTAN","tASIN","tACOS","tATAN","tABS","tSQRT","tEXP","tLOG","tLOG10",
  341. "tRAND","tGAUSS","tIF","tTURTLEX","tTURTLEY","tTURTLEZ","tSCOPE","tAND","tOR",
  342. "'!'","tEQ","tNEQ","tGEQ","tLEQ","'<'","'>'","tARROW","tPOW","'+'","'-'","'*'",
  343. "'/'","'%'","'^'","tUMINUS","'='","'{'","'}'","'['","']'","'&'","'\\\\'","'|'",
  344. "'$'","'.'","'('","','","':'","')'","';'","lgrammar","global_const","constant_def",
  345. "constants","constant","hulls","hull","primitives","primitive","vector","number",
  346. "transforms","transformation","tables","table","productions","production","predecessor",
  347. "name","arguments","parameters","condition","successors","successor","probability",
  348. "modules","module","expr_list","expression","no_argument","one_argument","attributes",
  349. "attr_list","attr_item","derivations","steps","sc","rp",""
  350. };
  351. #endif
  352.  
  353. static const short yyr1[] = {     0,
  354.     88,    89,    90,    90,    91,    91,    92,    93,    93,    94,
  355.     95,    95,    95,    95,    96,    96,    96,    96,    96,    97,
  356.     98,    98,    98,    98,    99,    99,   100,   100,   100,   100,
  357.    100,   101,   101,   102,   103,   103,   104,   104,   105,   105,
  358.    106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
  359.    106,   106,   106,   106,   106,   107,   108,   108,   109,   110,
  360.    110,   111,   111,   112,   112,   113,   113,   114,   114,   115,
  361.    115,   116,   116,   116,   116,   116,   116,   116,   116,   116,
  362.    116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
  363.    116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
  364.    116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
  365.    116,   117,   118,   119,   120,   120,   121,   121,   121,   121,
  366.    121,   121,   121,   121,   121,   121,   121,   121,   121,   121,
  367.    121,   121,   121,   122,   122,   123,   123,   123,   124,   125
  368. };
  369.  
  370. static const short yyr2[] = {     0,
  371.      7,     1,     0,     2,     1,     2,     4,     0,     2,     6,
  372.      1,     2,     2,     3,     3,     4,     3,     4,     5,     3,
  373.      1,     2,     2,     1,     1,     2,     2,     4,     3,     4,
  374.      5,     1,     2,     7,     1,     2,     3,     4,     1,     2,
  375.      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
  376.      1,     1,     1,     1,     1,     3,     1,     3,     2,     1,
  377.      2,     3,     2,     0,     3,     1,     2,     1,     4,     1,
  378.      3,     1,     1,     1,     1,     1,     2,     3,     3,     3,
  379.      3,     3,     3,     3,     3,     2,     3,     3,     3,     3,
  380.      3,     3,     3,     2,     2,     2,     2,     2,     2,     2,
  381.      2,     2,     2,     2,     2,     2,     2,     8,     2,     4,
  382.      3,     2,     3,     5,     0,     2,     3,     3,     3,     3,
  383.      3,     3,     3,     2,     3,     7,     3,     7,     7,     7,
  384.      3,     3,     3,     2,     4,     0,     3,     3,     1,     1
  385. };
  386.  
  387. static const short yydefact[] = {     0,
  388.      0,     0,   139,     3,     0,     8,     2,     0,     4,     5,
  389.      0,     0,     6,     0,     0,     9,     0,    32,    72,    76,
  390.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  391.      0,     0,     0,     0,    73,    74,    75,     0,     0,     0,
  392.      0,     0,     0,     0,     0,    33,     1,     0,   109,     0,
  393.     95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
  394.    105,     0,   106,   107,     0,    77,    86,    94,     0,     0,
  395.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  396.      0,     0,     0,     0,     7,     3,     0,   115,   140,     0,
  397.     70,   112,     0,     0,   111,    79,    78,    80,    81,    82,
  398.     83,    85,    84,    92,    87,    88,    89,    90,    91,    93,
  399.      0,     0,     0,     0,     0,     0,     0,    11,     0,     0,
  400.    110,   113,     0,    55,    47,    48,    50,    54,    45,    41,
  401.     42,    43,    44,    46,    49,    51,    52,    53,     0,    35,
  402.      0,    39,    21,    24,     0,     0,     0,     0,     0,     0,
  403.      0,     0,     0,    13,     0,     0,     0,     0,    12,    25,
  404.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  405.      0,     0,     0,     0,     0,     0,     0,   116,    71,     0,
  406.     42,    36,    64,     0,     0,     0,    60,     0,    40,    23,
  407.     22,    15,     0,     0,    17,     0,     0,    10,    14,    27,
  408.      0,     0,     0,    26,   136,     0,    68,     0,    66,     0,
  409.      0,     0,     0,     0,     0,   124,     0,     0,     0,     0,
  410.      0,     0,     0,     0,   114,     0,    34,     0,    63,    59,
  411.      0,    61,    37,    57,     0,    16,    20,    18,     0,    29,
  412.      0,     0,     0,   134,     0,   117,     0,    67,   118,   119,
  413.    120,   121,   122,   123,   125,     0,   127,     0,     0,     0,
  414.    131,   132,   133,     0,     0,    62,    38,     0,    56,    19,
  415.     28,    30,     0,     0,   136,     0,     0,     0,     0,     0,
  416.    108,    65,    58,    31,   138,   137,   135,    69,     0,     0,
  417.      0,     0,     0,     0,     0,     0,   126,   128,   129,   130,
  418.      0,     0,     0
  419. };
  420.  
  421. static const short yydefgoto[] = {   301,
  422.      6,     7,     9,    10,    11,    16,   117,   118,   148,   149,
  423.    159,   160,    17,    18,   139,   140,   141,   207,   189,   235,
  424.    185,   186,   187,   229,   208,   209,    90,    91,    49,    51,
  425.     47,   119,   178,   206,   244,     4,    92
  426. };
  427.  
  428. static const short yypact[] = {    10,
  429.     16,   -64,-32768,    29,    45,-32768,-32768,   -17,    45,-32768,
  430.     12,   402,-32768,    75,    84,-32768,    -3,-32768,-32768,    -7,
  431.     14,    14,    14,    14,    14,    14,    14,    14,    14,    14,
  432.     14,    22,    22,    23,-32768,-32768,-32768,    86,   402,   402,
  433.    402,   405,    21,    33,    41,-32768,-32768,   298,-32768,   402,
  434. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  435. -32768,    47,-32768,-32768,   402,-32768,   -57,   -57,   428,   402,
  436.    402,   402,   402,   402,   402,   402,   402,   402,   402,   402,
  437.    402,   402,   402,   402,-32768,    29,    72,-32768,-32768,   -29,
  438.    630,-32768,   428,   353,-32768,   661,   647,   675,   675,   172,
  439.    172,   172,   172,   -57,    13,    13,   -57,   -57,   -57,   -57,
  440.    146,     7,     7,     7,     7,     7,     2,    93,   295,   402,
  441. -32768,-32768,   402,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  442. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   194,-32768,
  443.    -49,    51,-32768,-32768,   133,   134,     7,     7,     7,     7,
  444.      7,     7,   -64,    93,     7,     7,     7,     7,    93,-32768,
  445.    135,   146,   402,   402,   402,   402,   402,   246,   402,   402,
  446.    402,   402,   402,   402,   138,   139,   -64,-32768,   630,   450,
  447.    -64,-32768,    62,   402,    79,   -61,-32768,   142,-32768,-32768,
  448. -32768,-32768,     7,     7,-32768,     7,     7,-32768,    93,-32768,
  449.      7,     7,     7,-32768,    64,   -66,    65,    43,-32768,   405,
  450.    405,   405,   405,   405,   405,-32768,   470,   405,   490,   510,
  451.    530,   405,   -64,   -64,-32768,   402,-32768,   160,   146,   630,
  452.    -61,-32768,-32768,-32768,     1,-32768,-32768,-32768,     7,-32768,
  453.      7,     7,   350,-32768,   162,-32768,   402,-32768,-32768,-32768,
  454. -32768,-32768,-32768,-32768,-32768,   402,-32768,   402,   402,   402,
  455. -32768,-32768,-32768,   428,    78,   146,-32768,   164,-32768,-32768,
  456. -32768,     7,    47,   428,    64,   -29,   550,   570,   590,   610,
  457. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   402,   402,
  458.    402,   402,   405,   405,   405,   405,-32768,-32768,-32768,-32768,
  459.    170,   179,-32768
  460. };
  461.  
  462. static const short yypgoto[] = {-32768,
  463. -32768,    94,-32768,   173,-32768,-32768,-32768,    66,  -107,  -103,
  464.     30,  -157,-32768,   171,-32768,    50,-32768,   -87,-32768,-32768,
  465. -32768,     5,  -151,-32768,   -38,  -191,   -55,   -12,    60,   349,
  466. -32768,-32768,-32768,-32768,   -82,   -37,   -68
  467. };
  468.  
  469.  
  470. #define    YYLAST        746
  471.  
  472.  
  473. static const short yytable[] = {    42,
  474.     95,   204,   183,    14,    85,    45,   150,    78,   147,   143,
  475.    144,   151,   152,    84,   183,     1,   248,   245,    14,     2,
  476.      3,   121,     3,   142,   122,     3,    67,    68,    69,   112,
  477.    113,   114,   115,   116,   232,   184,     5,    93,    15,   192,
  478.    193,   204,   195,   196,   197,   194,   124,   200,   201,     8,
  479.    203,   142,    94,   202,   120,    12,    89,    96,    97,    98,
  480.     99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
  481.    109,   110,   145,   146,   248,    48,   153,    78,    43,   232,
  482.     81,    82,    83,    84,   268,   236,    89,    44,   238,    66,
  483.    237,    63,    64,   239,    86,   242,    50,   240,   241,   112,
  484.    113,   114,   115,   116,    62,    65,    87,   179,   125,   126,
  485.    180,   127,   128,   129,    88,   198,   130,   131,   132,   133,
  486.    134,   135,   136,   137,   138,   155,   156,   157,   158,     3,
  487.    216,   270,    89,   188,   272,   190,   191,   271,   205,   225,
  488.    223,   224,   183,   227,   228,   234,   243,   247,   233,   124,
  489.    210,   211,   212,   213,   214,   215,   217,   218,   219,   220,
  490.    221,   222,   265,   282,   284,   275,   269,   283,   246,   302,
  491.    249,   230,   250,   251,   252,   253,   254,   255,   303,   111,
  492.    257,    13,   154,   199,   261,   262,   263,    46,   182,   231,
  493.    266,   276,   287,   267,     0,   281,     0,   124,     0,     0,
  494.      0,     0,     0,     0,   285,   286,     0,   288,     0,     0,
  495.      0,   125,   126,   264,   127,   128,   129,     0,     0,   130,
  496.    131,   132,   133,   134,   135,   136,   137,   138,     0,     0,
  497.    274,-32768,-32768,-32768,-32768,     0,    78,    79,    80,    81,
  498.     82,    83,    84,   277,     0,   278,   279,   280,    19,    20,
  499.      0,     0,     0,     0,     0,   297,   298,   299,   300,   125,
  500.    126,     0,   127,   128,   129,     0,     0,   130,   181,   132,
  501.    133,   134,   135,   136,   137,   138,   293,   294,   295,   296,
  502.      0,     0,    21,    22,    23,    24,    25,    26,    27,    28,
  503.     29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
  504.     19,    20,    39,     0,   161,   162,   163,   164,   165,   166,
  505.    167,   168,    40,   169,   170,   171,   172,   173,   174,   175,
  506.    176,     0,     0,     0,     0,     0,     0,     0,    41,     0,
  507.      0,     0,     3,     0,    21,    22,    23,    24,    25,    26,
  508.     27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
  509.     37,    38,    19,    20,    39,     0,     0,     0,     0,     0,
  510.      0,     0,     0,     0,    40,     0,     0,   273,     0,   177,
  511.     52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
  512.     41,     0,     0,    89,     0,     0,    21,    22,    23,    24,
  513.     25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
  514.     35,    36,    37,    38,    19,    20,    39,    70,    71,     0,
  515.     72,    73,    74,    75,    76,    77,    40,    78,    79,    80,
  516.     81,    82,    83,    84,     0,     0,     0,     0,     0,     0,
  517.      0,     0,    41,     0,     0,     0,   123,     0,    21,    22,
  518.     23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
  519.     33,    34,    35,    36,    37,    38,     0,     0,    39,    70,
  520.     71,     0,    72,    73,    74,    75,    76,    77,    40,    78,
  521.     79,    80,    81,    82,    83,    84,     0,     0,     0,     0,
  522.      0,     0,    70,    71,    41,    72,    73,    74,    75,    76,
  523.     77,     3,    78,    79,    80,    81,    82,    83,    84,     0,
  524.      0,     0,     0,     0,    70,    71,     0,    72,    73,    74,
  525.     75,    76,    77,    89,    78,    79,    80,    81,    82,    83,
  526.     84,     0,     0,     0,    70,    71,     0,    72,    73,    74,
  527.     75,    76,    77,   226,    78,    79,    80,    81,    82,    83,
  528.     84,     0,     0,     0,    70,    71,     0,    72,    73,    74,
  529.     75,    76,    77,   256,    78,    79,    80,    81,    82,    83,
  530.     84,     0,     0,     0,    70,    71,     0,    72,    73,    74,
  531.     75,    76,    77,   258,    78,    79,    80,    81,    82,    83,
  532.     84,     0,     0,     0,    70,    71,     0,    72,    73,    74,
  533.     75,    76,    77,   259,    78,    79,    80,    81,    82,    83,
  534.     84,     0,     0,     0,    70,    71,     0,    72,    73,    74,
  535.     75,    76,    77,   260,    78,    79,    80,    81,    82,    83,
  536.     84,     0,     0,     0,    70,    71,     0,    72,    73,    74,
  537.     75,    76,    77,   289,    78,    79,    80,    81,    82,    83,
  538.     84,     0,     0,     0,    70,    71,     0,    72,    73,    74,
  539.     75,    76,    77,   290,    78,    79,    80,    81,    82,    83,
  540.     84,     0,     0,     0,    70,    71,     0,    72,    73,    74,
  541.     75,    76,    77,   291,    78,    79,    80,    81,    82,    83,
  542.     84,     0,     0,     0,    70,    71,     0,    72,    73,    74,
  543.     75,    76,    77,   292,    78,    79,    80,    81,    82,    83,
  544.     84,    70,     0,     0,    72,    73,    74,    75,    76,    77,
  545.      0,    78,    79,    80,    81,    82,    83,    84,    72,    73,
  546.     74,    75,    76,    77,     0,    78,    79,    80,    81,    82,
  547.     83,    84,-32768,-32768,    74,    75,    76,    77,     0,    78,
  548.     79,    80,    81,    82,    83,    84
  549. };
  550.  
  551. static const short yycheck[] = {    12,
  552.     69,   159,    64,     7,    42,     9,   114,    65,   112,     3,
  553.      4,   115,   116,    71,    64,     6,   208,    84,     7,     4,
  554.     87,    90,    87,   111,    93,    87,    39,    40,    41,    28,
  555.     29,    30,    31,    32,   186,    85,     8,    50,    27,   147,
  556.    148,   199,   150,   151,   152,   149,     4,   155,   156,     5,
  557.    158,   139,    65,   157,    84,    73,    86,    70,    71,    72,
  558.     73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
  559.     83,    84,    66,    67,   266,    83,    75,    65,     4,   231,
  560.     68,    69,    70,    71,    84,   193,    86,     4,   196,     4,
  561.    194,    32,    33,   197,    74,   203,    83,   201,   202,    28,
  562.     29,    30,    31,    32,    83,    83,    74,   120,    66,    67,
  563.    123,    69,    70,    71,    74,   153,    74,    75,    76,    77,
  564.     78,    79,    80,    81,    82,    33,    34,    35,    36,    87,
  565.    168,   239,    86,    83,   242,     3,     3,   241,     4,   177,
  566.      3,     3,    64,   181,    83,     4,    83,    83,   186,     4,
  567.    163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
  568.    173,   174,     3,    86,   272,     4,   235,     4,   206,     0,
  569.    208,   184,   210,   211,   212,   213,   214,   215,     0,    86,
  570.    218,     9,   117,   154,   222,   223,   224,    17,   139,   185,
  571.    229,   247,   275,   231,    -1,   264,    -1,     4,    -1,    -1,
  572.     -1,    -1,    -1,    -1,   273,   274,    -1,   276,    -1,    -1,
  573.     -1,    66,    67,   226,    69,    70,    71,    -1,    -1,    74,
  574.     75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
  575.    243,    60,    61,    62,    63,    -1,    65,    66,    67,    68,
  576.     69,    70,    71,   256,    -1,   258,   259,   260,     3,     4,
  577.     -1,    -1,    -1,    -1,    -1,   293,   294,   295,   296,    66,
  578.     67,    -1,    69,    70,    71,    -1,    -1,    74,    75,    76,
  579.     77,    78,    79,    80,    81,    82,   289,   290,   291,   292,
  580.     -1,    -1,    37,    38,    39,    40,    41,    42,    43,    44,
  581.     45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
  582.      3,     4,    57,    -1,    10,    11,    12,    13,    14,    15,
  583.     16,    17,    67,    19,    20,    21,    22,    23,    24,    25,
  584.     26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    -1,
  585.     -1,    -1,    87,    -1,    37,    38,    39,    40,    41,    42,
  586.     43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
  587.     53,    54,     3,     4,    57,    -1,    -1,    -1,    -1,    -1,
  588.     -1,    -1,    -1,    -1,    67,    -1,    -1,    18,    -1,    75,
  589.     22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
  590.     83,    -1,    -1,    86,    -1,    -1,    37,    38,    39,    40,
  591.     41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
  592.     51,    52,    53,    54,     3,     4,    57,    55,    56,    -1,
  593.     58,    59,    60,    61,    62,    63,    67,    65,    66,    67,
  594.     68,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
  595.     -1,    -1,    83,    -1,    -1,    -1,    84,    -1,    37,    38,
  596.     39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
  597.     49,    50,    51,    52,    53,    54,    -1,    -1,    57,    55,
  598.     56,    -1,    58,    59,    60,    61,    62,    63,    67,    65,
  599.     66,    67,    68,    69,    70,    71,    -1,    -1,    -1,    -1,
  600.     -1,    -1,    55,    56,    83,    58,    59,    60,    61,    62,
  601.     63,    87,    65,    66,    67,    68,    69,    70,    71,    -1,
  602.     -1,    -1,    -1,    -1,    55,    56,    -1,    58,    59,    60,
  603.     61,    62,    63,    86,    65,    66,    67,    68,    69,    70,
  604.     71,    -1,    -1,    -1,    55,    56,    -1,    58,    59,    60,
  605.     61,    62,    63,    84,    65,    66,    67,    68,    69,    70,
  606.     71,    -1,    -1,    -1,    55,    56,    -1,    58,    59,    60,
  607.     61,    62,    63,    84,    65,    66,    67,    68,    69,    70,
  608.     71,    -1,    -1,    -1,    55,    56,    -1,    58,    59,    60,
  609.     61,    62,    63,    84,    65,    66,    67,    68,    69,    70,
  610.     71,    -1,    -1,    -1,    55,    56,    -1,    58,    59,    60,
  611.     61,    62,    63,    84,    65,    66,    67,    68,    69,    70,
  612.     71,    -1,    -1,    -1,    55,    56,    -1,    58,    59,    60,
  613.     61,    62,    63,    84,    65,    66,    67,    68,    69,    70,
  614.     71,    -1,    -1,    -1,    55,    56,    -1,    58,    59,    60,
  615.     61,    62,    63,    84,    65,    66,    67,    68,    69,    70,
  616.     71,    -1,    -1,    -1,    55,    56,    -1,    58,    59,    60,
  617.     61,    62,    63,    84,    65,    66,    67,    68,    69,    70,
  618.     71,    -1,    -1,    -1,    55,    56,    -1,    58,    59,    60,
  619.     61,    62,    63,    84,    65,    66,    67,    68,    69,    70,
  620.     71,    -1,    -1,    -1,    55,    56,    -1,    58,    59,    60,
  621.     61,    62,    63,    84,    65,    66,    67,    68,    69,    70,
  622.     71,    55,    -1,    -1,    58,    59,    60,    61,    62,    63,
  623.     -1,    65,    66,    67,    68,    69,    70,    71,    58,    59,
  624.     60,    61,    62,    63,    -1,    65,    66,    67,    68,    69,
  625.     70,    71,    58,    59,    60,    61,    62,    63,    -1,    65,
  626.     66,    67,    68,    69,    70,    71
  627. };
  628. /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  629. #line 3 "/usr/local/lib/bison/bison.simple"
  630.  
  631. /* Skeleton output parser for bison,
  632.    Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  633.  
  634.    This program is free software; you can redistribute it and/or modify
  635.    it under the terms of the GNU General Public License as published by
  636.    the Free Software Foundation; either version 1, or (at your option)
  637.    any later version.
  638.  
  639.    This program is distributed in the hope that it will be useful,
  640.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  641.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  642.    GNU General Public License for more details.
  643.  
  644.    You should have received a copy of the GNU General Public License
  645.    along with this program; if not, write to the Free Software
  646.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  647.  
  648.  
  649. #ifndef alloca
  650. #ifdef __GNUC__
  651. #define alloca __builtin_alloca
  652. #else /* not GNU C.  */
  653. #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__)
  654. #include <alloca.h>
  655. #else /* not sparc */
  656. #if defined (MSDOS) && !defined (__TURBOC__)
  657. #include <malloc.h>
  658. #else /* not MSDOS, or __TURBOC__ */
  659. #if defined(_AIX)
  660. #include <malloc.h>
  661.  #pragma alloca
  662. #endif /* not _AIX */
  663. #endif /* not MSDOS, or __TURBOC__ */
  664. #endif /* not sparc.  */
  665. #endif /* not GNU C.  */
  666. #endif /* alloca not defined.  */
  667.  
  668. /* This is the parser code that is written into each bison parser
  669.   when the %semantic_parser declaration is not specified in the grammar.
  670.   It was written by Richard Stallman by simplifying the hairy parser
  671.   used when %semantic_parser is specified.  */
  672.  
  673. /* Note: there must be only one dollar sign in this file.
  674.    It is replaced by the list of actions, each action
  675.    as one case of the switch.  */
  676.  
  677. #define yyerrok        (yyerrstatus = 0)
  678. #define yyclearin    (yychar = YYEMPTY)
  679. #define YYEMPTY        -2
  680. #define YYEOF        0
  681. #define YYACCEPT    return(0)
  682. #define YYABORT     return(1)
  683. #define YYERROR        goto yyerrlab1
  684. /* Like YYERROR except do call yyerror.
  685.    This remains here temporarily to ease the
  686.    transition to the new meaning of YYERROR, for GCC.
  687.    Once GCC version 2 has supplanted version 1, this can go.  */
  688. #define YYFAIL        goto yyerrlab
  689. #define YYRECOVERING()  (!!yyerrstatus)
  690. #define YYBACKUP(token, value) \
  691. do                                \
  692.   if (yychar == YYEMPTY && yylen == 1)                \
  693.     { yychar = (token), yylval = (value);            \
  694.       yychar1 = YYTRANSLATE (yychar);                \
  695.       YYPOPSTACK;                        \
  696.       goto yybackup;                        \
  697.     }                                \
  698.   else                                \
  699.     { yyerror ("syntax error: cannot back up"); YYERROR; }    \
  700. while (0)
  701.  
  702. #define YYTERROR    1
  703. #define YYERRCODE    256
  704.  
  705. #ifndef YYPURE
  706. #define YYLEX        yylex()
  707. #endif
  708.  
  709. #ifdef YYPURE
  710. #ifdef YYLSP_NEEDED
  711. #define YYLEX        yylex(&yylval, &yylloc)
  712. #else
  713. #define YYLEX        yylex(&yylval)
  714. #endif
  715. #endif
  716.  
  717. /* If nonreentrant, generate the variables here */
  718.  
  719. #ifndef YYPURE
  720.  
  721. int    yychar;            /*  the lookahead symbol        */
  722. YYSTYPE    yylval;            /*  the semantic value of the        */
  723.                 /*  lookahead symbol            */
  724.  
  725. #ifdef YYLSP_NEEDED
  726. YYLTYPE yylloc;            /*  location data for the lookahead    */
  727.                 /*  symbol                */
  728. #endif
  729.  
  730. int yynerrs;            /*  number of parse errors so far       */
  731. #endif  /* not YYPURE */
  732.  
  733. #if YYDEBUG != 0
  734. int yydebug;            /*  nonzero means print parse trace    */
  735. /* Since this is uninitialized, it does not stop multiple parsers
  736.    from coexisting.  */
  737. #endif
  738.  
  739. /*  YYINITDEPTH indicates the initial size of the parser's stacks    */
  740.  
  741. #ifndef    YYINITDEPTH
  742. #define YYINITDEPTH 200
  743. #endif
  744.  
  745. /*  YYMAXDEPTH is the maximum size the stacks can grow to
  746.     (effective only if the built-in stack extension method is used).  */
  747.  
  748. #if YYMAXDEPTH == 0
  749. #undef YYMAXDEPTH
  750. #endif
  751.  
  752. #ifndef YYMAXDEPTH
  753. #define YYMAXDEPTH 10000
  754. #endif
  755.  
  756. #if __GNUC__ > 1        /* GNU C and GNU C++ define this.  */
  757. #define __yy_bcopy(FROM,TO,COUNT)    __builtin_memcpy(TO,FROM,COUNT)
  758. #else                /* not GNU C or C++ */
  759. #ifndef __cplusplus
  760.  
  761. /* This is the most reliable way to avoid incompatibilities
  762.    in available built-in functions on various systems.  */
  763. static void
  764. __yy_bcopy (from, to, count)
  765.      char *from;
  766.      char *to;
  767.      int count;
  768. {
  769.   register char *f = from;
  770.   register char *t = to;
  771.   register int i = count;
  772.  
  773.   while (i-- > 0)
  774.     *t++ = *f++;
  775. }
  776.  
  777. #else /* __cplusplus */
  778.  
  779. /* This is the most reliable way to avoid incompatibilities
  780.    in available built-in functions on various systems.  */
  781. static void
  782. __yy_bcopy (char *from, char *to, int count)
  783. {
  784.   register char *f = from;
  785.   register char *t = to;
  786.   register int i = count;
  787.  
  788.   while (i-- > 0)
  789.     *t++ = *f++;
  790. }
  791.  
  792. #endif
  793. #endif
  794.  
  795. #line 169 "/usr/local/lib/bison/bison.simple"
  796. int
  797. yyparse()
  798. {
  799.   register int yystate;
  800.   register int yyn;
  801.   register short *yyssp;
  802.   register YYSTYPE *yyvsp;
  803.   int yyerrstatus;    /*  number of tokens to shift before error messages enabled */
  804.   int yychar1;        /*  lookahead token as an internal (translated) token number */
  805.  
  806.   short    yyssa[YYINITDEPTH];    /*  the state stack            */
  807.   YYSTYPE yyvsa[YYINITDEPTH];    /*  the semantic value stack        */
  808.  
  809.   short *yyss = yyssa;        /*  refer to the stacks thru separate pointers */
  810.   YYSTYPE *yyvs = yyvsa;    /*  to allow yyoverflow to reallocate them elsewhere */
  811.  
  812. #ifdef YYLSP_NEEDED
  813.   YYLTYPE yylsa[YYINITDEPTH];    /*  the location stack            */
  814.   YYLTYPE *yyls = yylsa;
  815.   YYLTYPE *yylsp;
  816.  
  817. #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
  818. #else
  819. #define YYPOPSTACK   (yyvsp--, yyssp--)
  820. #endif
  821.  
  822.   int yystacksize = YYINITDEPTH;
  823.  
  824. #ifdef YYPURE
  825.   int yychar;
  826.   YYSTYPE yylval;
  827.   int yynerrs;
  828. #ifdef YYLSP_NEEDED
  829.   YYLTYPE yylloc;
  830. #endif
  831. #endif
  832.  
  833.   YYSTYPE yyval;        /*  the variable used to return        */
  834.                 /*  semantic values from the action    */
  835.                 /*  routines                */
  836.  
  837.   int yylen;
  838.  
  839. #if YYDEBUG != 0
  840.   if (yydebug)
  841.     fprintf(stderr, "Starting parse\n");
  842. #endif
  843.  
  844.   yystate = 0;
  845.   yyerrstatus = 0;
  846.   yynerrs = 0;
  847.   yychar = YYEMPTY;        /* Cause a token to be read.  */
  848.  
  849.   /* Initialize stack pointers.
  850.      Waste one element of value and location stack
  851.      so that they stay on the same level as the state stack.  */
  852.  
  853.   yyssp = yyss - 1;
  854.   yyvsp = yyvs;
  855. #ifdef YYLSP_NEEDED
  856.   yylsp = yyls;
  857. #endif
  858.  
  859. /* Push a new state, which is found in  yystate  .  */
  860. /* In all cases, when you get here, the value and location stacks
  861.    have just been pushed. so pushing a state here evens the stacks.  */
  862. yynewstate:
  863.  
  864.   *++yyssp = yystate;
  865.  
  866.   if (yyssp >= yyss + yystacksize - 1)
  867.     {
  868.       /* Give user a chance to reallocate the stack */
  869.       /* Use copies of these so that the &'s don't force the real ones into memory. */
  870.       YYSTYPE *yyvs1 = yyvs;
  871.       short *yyss1 = yyss;
  872. #ifdef YYLSP_NEEDED
  873.       YYLTYPE *yyls1 = yyls;
  874. #endif
  875.  
  876.       /* Get the current used size of the three stacks, in elements.  */
  877.       int size = yyssp - yyss + 1;
  878.  
  879. #ifdef yyoverflow
  880.       /* Each stack pointer address is followed by the size of
  881.      the data in use in that stack, in bytes.  */
  882.       yyoverflow("parser stack overflow",
  883.          &yyss1, size * sizeof (*yyssp),
  884.          &yyvs1, size * sizeof (*yyvsp),
  885. #ifdef YYLSP_NEEDED
  886.          &yyls1, size * sizeof (*yylsp),
  887. #endif
  888.          &yystacksize);
  889.  
  890.       yyss = yyss1; yyvs = yyvs1;
  891. #ifdef YYLSP_NEEDED
  892.       yyls = yyls1;
  893. #endif
  894. #else /* no yyoverflow */
  895.       /* Extend the stack our own way.  */
  896.       if (yystacksize >= YYMAXDEPTH)
  897.     {
  898.       yyerror("parser stack overflow");
  899.       return 2;
  900.     }
  901.       yystacksize *= 2;
  902.       if (yystacksize > YYMAXDEPTH)
  903.     yystacksize = YYMAXDEPTH;
  904.       yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
  905.       __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
  906.       yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
  907.       __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
  908. #ifdef YYLSP_NEEDED
  909.       yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
  910.       __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
  911. #endif
  912. #endif /* no yyoverflow */
  913.  
  914.       yyssp = yyss + size - 1;
  915.       yyvsp = yyvs + size - 1;
  916. #ifdef YYLSP_NEEDED
  917.       yylsp = yyls + size - 1;
  918. #endif
  919.  
  920. #if YYDEBUG != 0
  921.       if (yydebug)
  922.     fprintf(stderr, "Stack size increased to %d\n", yystacksize);
  923. #endif
  924.  
  925.       if (yyssp >= yyss + yystacksize - 1)
  926.     YYABORT;
  927.     }
  928.  
  929. #if YYDEBUG != 0
  930.   if (yydebug)
  931.     fprintf(stderr, "Entering state %d\n", yystate);
  932. #endif
  933.  
  934.  yybackup:
  935.  
  936. /* Do appropriate processing given the current state.  */
  937. /* Read a lookahead token if we need one and don't already have one.  */
  938. /* yyresume: */
  939.  
  940.   /* First try to decide what to do without reference to lookahead token.  */
  941.  
  942.   yyn = yypact[yystate];
  943.   if (yyn == YYFLAG)
  944.     goto yydefault;
  945.  
  946.   /* Not known => get a lookahead token if don't already have one.  */
  947.  
  948.   /* yychar is either YYEMPTY or YYEOF
  949.      or a valid token in external form.  */
  950.  
  951.   if (yychar == YYEMPTY)
  952.     {
  953. #if YYDEBUG != 0
  954.       if (yydebug)
  955.     fprintf(stderr, "Reading a token: ");
  956. #endif
  957.       yychar = YYLEX;
  958.     }
  959.  
  960.   /* Convert token to internal form (in yychar1) for indexing tables with */
  961.  
  962.   if (yychar <= 0)        /* This means end of input. */
  963.     {
  964.       yychar1 = 0;
  965.       yychar = YYEOF;        /* Don't call YYLEX any more */
  966.  
  967. #if YYDEBUG != 0
  968.       if (yydebug)
  969.     fprintf(stderr, "Now at end of input.\n");
  970. #endif
  971.     }
  972.   else
  973.     {
  974.       yychar1 = YYTRANSLATE(yychar);
  975.  
  976. #if YYDEBUG != 0
  977.       if (yydebug)
  978.     {
  979.       fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
  980.       /* Give the individual parser a way to print the precise meaning
  981.          of a token, for further debugging info.  */
  982. #ifdef YYPRINT
  983.       YYPRINT (stderr, yychar, yylval);
  984. #endif
  985.       fprintf (stderr, ")\n");
  986.     }
  987. #endif
  988.     }
  989.  
  990.   yyn += yychar1;
  991.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
  992.     goto yydefault;
  993.  
  994.   yyn = yytable[yyn];
  995.  
  996.   /* yyn is what to do for this token type in this state.
  997.      Negative => reduce, -yyn is rule number.
  998.      Positive => shift, yyn is new state.
  999.        New state is final state => don't bother to shift,
  1000.        just return success.
  1001.      0, or most negative number => error.  */
  1002.  
  1003.   if (yyn < 0)
  1004.     {
  1005.       if (yyn == YYFLAG)
  1006.     goto yyerrlab;
  1007.       yyn = -yyn;
  1008.       goto yyreduce;
  1009.     }
  1010.   else if (yyn == 0)
  1011.     goto yyerrlab;
  1012.  
  1013.   if (yyn == YYFINAL)
  1014.     YYACCEPT;
  1015.  
  1016.   /* Shift the lookahead token.  */
  1017.  
  1018. #if YYDEBUG != 0
  1019.   if (yydebug)
  1020.     fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
  1021. #endif
  1022.  
  1023.   /* Discard the token being shifted unless it is eof.  */
  1024.   if (yychar != YYEOF)
  1025.     yychar = YYEMPTY;
  1026.  
  1027.   *++yyvsp = yylval;
  1028. #ifdef YYLSP_NEEDED
  1029.   *++yylsp = yylloc;
  1030. #endif
  1031.  
  1032.   /* count tokens shifted since error; after three, turn off error status.  */
  1033.   if (yyerrstatus) yyerrstatus--;
  1034.  
  1035.   yystate = yyn;
  1036.   goto yynewstate;
  1037.  
  1038. /* Do the default action for the current state.  */
  1039. yydefault:
  1040.  
  1041.   yyn = yydefact[yystate];
  1042.   if (yyn == 0)
  1043.     goto yyerrlab;
  1044.  
  1045. /* Do a reduction.  yyn is the number of a rule to reduce with.  */
  1046. yyreduce:
  1047.   yylen = yyr2[yyn];
  1048.   yyval = yyvsp[1-yylen]; /* implement default value of the action */
  1049.  
  1050. #if YYDEBUG != 0
  1051.   if (yydebug)
  1052.     {
  1053.       int i;
  1054.  
  1055.       fprintf (stderr, "Reducing via rule %d (line %d), ",
  1056.            yyn, yyrline[yyn]);
  1057.  
  1058.       /* Print the symboles being reduced, and their result.  */
  1059.       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
  1060.     fprintf (stderr, "%s ", yytname[yyrhs[i]]);
  1061.       fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
  1062.     }
  1063. #endif
  1064.  
  1065.  
  1066.   switch (yyn) {
  1067.  
  1068. case 1:
  1069. #line 174 "yacc.y"
  1070. {
  1071.            if (!axiom)
  1072.              yyerror("no axiom defined");
  1073.            if (!derivation)
  1074.              yyerror("no derivation list defined");
  1075.  
  1076.            lsystem = new LSystem(Name(yyvsp[-5].name), yyvsp[-1].table_list, axiom, derivation);
  1077.            theOptions.hulls = theHulls;
  1078.            delete yyvsp[-5].name;
  1079.          ;
  1080.     break;}
  1081. case 2:
  1082. #line 186 "yacc.y"
  1083. { definingLocalConst = 1; ;
  1084.     break;}
  1085. case 7:
  1086. #line 198 "yacc.y"
  1087.            if (definingLocalConst) {
  1088.              if (!LocalConst->insert(*yyvsp[-3].name, yyvsp[-1].expr->simplify()))
  1089.                yyerror("Constant " + *yyvsp[-3].name + " already defined");
  1090.            }
  1091.            else {
  1092.              if (!GlobalConst.insert(*yyvsp[-3].name, yyvsp[-1].expr->simplify()))
  1093.                yyerror("Constant " + *yyvsp[-3].name + " already defined");
  1094.            }
  1095.            delete yyvsp[-3].name;
  1096.          ;
  1097.     break;}
  1098. case 10:
  1099. #line 216 "yacc.y"
  1100. {
  1101.            if (!theHulls->insert(*yyvsp[-4].name, yyvsp[-2].hull))
  1102.              yyerror("hull " + *yyvsp[-4].name + " already defined");
  1103.            delete yyvsp[-4].name;
  1104.          ;
  1105.     break;}
  1106. case 11:
  1107. #line 224 "yacc.y"
  1108. {
  1109.            yyval.hull = new Hull;
  1110.            yyval.hull->addPrimitive(yyvsp[0].geoObject);
  1111.          ;
  1112.     break;}
  1113. case 12:
  1114. #line 229 "yacc.y"
  1115. {
  1116.            if (!yyvsp[-1].geoObject->setTransform(yyvsp[0].trans)) 
  1117.              yyerror("singular matrix");
  1118.  
  1119.            yyval.hull = new Hull;
  1120.            yyval.hull->addPrimitive(yyvsp[-1].geoObject);
  1121.          ;
  1122.     break;}
  1123. case 13:
  1124. #line 237 "yacc.y"
  1125.            yyval.hull = yyvsp[-1].hull;
  1126.            yyval.hull->addPrimitive(yyvsp[0].geoObject);
  1127.          ;
  1128.     break;}
  1129. case 14:
  1130. #line 242 "yacc.y"
  1131.            if (!yyvsp[-1].geoObject->setTransform(yyvsp[0].trans)) 
  1132.              yyerror("singular matrix");
  1133.  
  1134.            yyval.hull = yyvsp[-2].hull;
  1135.            yyval.hull->addPrimitive(yyvsp[-1].geoObject);
  1136.          ;
  1137.     break;}
  1138. case 15:
  1139. #line 252 "yacc.y"
  1140. {
  1141.            if ((yyval.geoObject = Sphere::create(yyvsp[-1].realnumber, *yyvsp[0].vector)) == NULL)
  1142.              yyerror("degenerate sphere");
  1143.  
  1144.            delete yyvsp[0].vector;
  1145.                  ;
  1146.     break;}
  1147. case 16:
  1148. #line 259 "yacc.y"
  1149. {
  1150.            if ((yyval.geoObject = Triangle::create(*yyvsp[-2].vector, *yyvsp[-1].vector, *yyvsp[0].vector)) == NULL)
  1151.              yyerror("degenerate triangle");
  1152.  
  1153.            delete yyvsp[-2].vector; 
  1154.            delete yyvsp[-1].vector; 
  1155.            delete yyvsp[0].vector;
  1156.                  ;
  1157.     break;}
  1158. case 17:
  1159. #line 268 "yacc.y"
  1160. {
  1161.            if ((yyval.geoObject = Plane::create(*yyvsp[-1].vector, *yyvsp[0].vector)) == NULL)
  1162.              yyerror("degenerate plane normal");
  1163.  
  1164.            delete yyvsp[-1].vector; 
  1165.            delete yyvsp[0].vector;
  1166.                  ;
  1167.     break;}
  1168. case 18:
  1169. #line 276 "yacc.y"
  1170. {
  1171.            if ((yyval.geoObject = Cylinder::create(yyvsp[-2].realnumber, *yyvsp[-1].vector, *yyvsp[0].vector)) == NULL)
  1172.              yyerror("degenerate cylinder");
  1173.  
  1174.            delete yyvsp[-1].vector; 
  1175.            delete yyvsp[0].vector;
  1176.                  ;
  1177.     break;}
  1178. case 19:
  1179. #line 284 "yacc.y"
  1180. {
  1181.            if ((yyval.geoObject = Cone::create(yyvsp[-3].realnumber, *yyvsp[-2].vector, yyvsp[-1].realnumber, *yyvsp[0].vector)) == NULL)
  1182.              yyerror("degenerate cone");
  1183.  
  1184.            delete yyvsp[-2].vector; 
  1185.            delete yyvsp[0].vector;
  1186.                  ;
  1187.     break;}
  1188. case 20:
  1189. #line 294 "yacc.y"
  1190.            yyval.vector = new Vector(yyvsp[-2].realnumber, yyvsp[-1].realnumber, yyvsp[0].realnumber);
  1191.          ;
  1192.     break;}
  1193. case 21:
  1194. #line 300 "yacc.y"
  1195.            yyval.realnumber = *yyvsp[0].value; 
  1196.            delete yyvsp[0].value;
  1197.          ;
  1198.     break;}
  1199. case 22:
  1200. #line 305 "yacc.y"
  1201. {
  1202.            yyval.realnumber = *yyvsp[0].value;
  1203.            yyval.realnumber = -yyval.realnumber;
  1204.            delete yyvsp[0].value;
  1205.          ;
  1206.     break;}
  1207. case 23:
  1208. #line 311 "yacc.y"
  1209.            yyval.realnumber = *yyvsp[0].value; 
  1210.            delete yyvsp[0].value;
  1211.          ;
  1212.     break;}
  1213. case 24:
  1214. #line 316 "yacc.y"
  1215. {
  1216.            Expression *expr;
  1217.  
  1218.            if (!GlobalConst.lookup(*yyvsp[0].name, expr))
  1219.              yyerror(*yyvsp[0].name + " unknown");
  1220.            else
  1221.                      yyval.realnumber = expr->evaluate();
  1222.  
  1223.            delete yyvsp[0].name;
  1224.          ;
  1225.     break;}
  1226. case 25:
  1227. #line 329 "yacc.y"
  1228.            yyval.trans = yyvsp[0].trans;
  1229.              ;
  1230.     break;}
  1231. case 26:
  1232. #line 333 "yacc.y"
  1233. {
  1234.            (*yyvsp[-1].trans) *= (*yyvsp[0].trans);
  1235.            yyval.trans = yyvsp[-1].trans;
  1236.            delete yyvsp[0].trans;
  1237.          ;
  1238.     break;}
  1239. case 27:
  1240. #line 341 "yacc.y"
  1241. {
  1242.            yyval.trans = new TransMatrix;
  1243.            yyval.trans->translate(*yyvsp[0].vector);
  1244.            delete yyvsp[0].vector;
  1245.          ;
  1246.     break;}
  1247. case 28:
  1248. #line 347 "yacc.y"
  1249. {
  1250.            yyval.trans = new TransMatrix;
  1251.            yyval.trans->scale(yyvsp[-2].realnumber, yyvsp[-1].realnumber, yyvsp[0].realnumber);
  1252.          ;
  1253.     break;}
  1254. case 29:
  1255. #line 352 "yacc.y"
  1256. {
  1257.            yyval.trans = new TransMatrix;
  1258.            yyval.trans->rotate(*yyvsp[-1].vector, dtor(yyvsp[0].realnumber));
  1259.            delete yyvsp[-1].vector;
  1260.          ;
  1261.     break;}
  1262. case 30:
  1263. #line 358 "yacc.y"
  1264. {
  1265.            yyval.trans = new TransMatrix(*yyvsp[-2].vector, *yyvsp[-1].vector, *yyvsp[0].vector);
  1266.            delete yyvsp[-2].vector;
  1267.            delete yyvsp[-1].vector;
  1268.            delete yyvsp[0].vector;
  1269.          ;
  1270.     break;}
  1271. case 31:
  1272. #line 365 "yacc.y"
  1273. {
  1274.            yyval.trans = new TransMatrix(*yyvsp[-3].vector, *yyvsp[-2].vector, *yyvsp[-1].vector, *yyvsp[0].vector);
  1275.            delete yyvsp[-3].vector;
  1276.            delete yyvsp[-2].vector;
  1277.            delete yyvsp[-1].vector;
  1278.            delete yyvsp[0].vector;
  1279.          ;
  1280.     break;}
  1281. case 32:
  1282. #line 375 "yacc.y"
  1283.            yyval.table_list = new TableList(1);
  1284.            yyval.table_list->append(yyvsp[0].table);
  1285.          ;
  1286.     break;}
  1287. case 33:
  1288. #line 380 "yacc.y"
  1289.            yyval.table_list = yyvsp[-1].table_list;
  1290.            yyval.table_list->append(yyvsp[0].table);
  1291.          ;
  1292.     break;}
  1293. case 34:
  1294. #line 387 "yacc.y"
  1295. {
  1296.            Table *table = new Table(Name(yyvsp[-5].name), yyvsp[-2].prod_list);
  1297.            if (!theTables.insert(*yyvsp[-5].name, table))
  1298.              yyerror("Table " + *yyvsp[-5].name + " already defined");
  1299.            else {
  1300.              // delete current local constants
  1301.              delete LocalConst;
  1302.              LocalConst = new ExprSymtab(503);
  1303.  
  1304.              yyval.table = table;
  1305.            }
  1306.            delete yyvsp[-5].name;
  1307.          ;
  1308.     break;}
  1309. case 35:
  1310. #line 403 "yacc.y"
  1311.            nthParam = 0; 
  1312.            yyval.prod_list = new ProductionList;
  1313.            yyval.prod_list->append(yyvsp[0].production);
  1314.          ;
  1315.     break;}
  1316. case 36:
  1317. #line 409 "yacc.y"
  1318.            nthParam = 0; 
  1319.            yyval.prod_list = yyvsp[-1].prod_list;
  1320.            yyval.prod_list->append(yyvsp[0].production);
  1321.          ;
  1322.     break;}
  1323. case 37:
  1324. #line 417 "yacc.y"
  1325.            yyval.production = new Production(yyvsp[-2].predecessor, NULL, yyvsp[-1].succ_list);
  1326.            if (yyval.production->cumulateProbability())
  1327.              yyerror("Sum of production probabilities is > 1");
  1328.  
  1329.                    delete FormalParam;
  1330.            FormalParam = new IntSymtab(17);
  1331.          ;
  1332.     break;}
  1333. case 38:
  1334. #line 426 "yacc.y"
  1335. {
  1336.            yyval.production = new Production(yyvsp[-3].predecessor, yyvsp[-2].expr, yyvsp[-1].succ_list);
  1337.            if (yyval.production->cumulateProbability())
  1338.              yyerror("Sum of production probabilities is > 1");
  1339.  
  1340.                    delete FormalParam;
  1341.            FormalParam = new IntSymtab(17);
  1342.          ;
  1343.     break;}
  1344. case 39:
  1345. #line 437 "yacc.y"
  1346.            yyval.predecessor = new Predecessor(Name(yyvsp[0].name), NULL); 
  1347.            delete yyvsp[0].name;
  1348.          ;
  1349.     break;}
  1350. case 40:
  1351. #line 442 "yacc.y"
  1352.            yyval.predecessor = new Predecessor(Name(yyvsp[-1].name), yyvsp[0].name_list); 
  1353.            delete yyvsp[-1].name;
  1354.          ;
  1355.     break;}
  1356. case 41:
  1357. #line 449 "yacc.y"
  1358. { yyval.name = new rcString("{"); ;
  1359.     break;}
  1360. case 42:
  1361. #line 451 "yacc.y"
  1362. { yyval.name = new rcString("}"); ;
  1363.     break;}
  1364. case 43:
  1365. #line 453 "yacc.y"
  1366. { yyval.name = new rcString("["); ;
  1367.     break;}
  1368. case 44:
  1369. #line 455 "yacc.y"
  1370. { yyval.name = new rcString("]"); ;
  1371.     break;}
  1372. case 45:
  1373. #line 457 "yacc.y"
  1374. { yyval.name = new rcString("^"); ;
  1375.     break;}
  1376. case 46:
  1377. #line 459 "yacc.y"
  1378. { yyval.name = new rcString("&"); ;
  1379.     break;}
  1380. case 47:
  1381. #line 461 "yacc.y"
  1382. { yyval.name = new rcString("+"); ;
  1383.     break;}
  1384. case 48:
  1385. #line 463 "yacc.y"
  1386. { yyval.name = new rcString("-"); ;
  1387.     break;}
  1388. case 49:
  1389. #line 465 "yacc.y"
  1390. { yyval.name = new rcString("\\"); ;
  1391.     break;}
  1392. case 50:
  1393. #line 467 "yacc.y"
  1394. { yyval.name = new rcString("/"); ;
  1395.     break;}
  1396. case 51:
  1397. #line 469 "yacc.y"
  1398. { yyval.name = new rcString("|"); ;
  1399.     break;}
  1400. case 52:
  1401. #line 471 "yacc.y"
  1402. { yyval.name = new rcString("$"); ;
  1403.     break;}
  1404. case 53:
  1405. #line 473 "yacc.y"
  1406. { yyval.name = new rcString("."); ;
  1407.     break;}
  1408. case 54:
  1409. #line 475 "yacc.y"
  1410. { yyval.name = new rcString("~"); ;
  1411.     break;}
  1412. case 55:
  1413. #line 477 "yacc.y"
  1414. { yyval.name = yyvsp[0].name; ;
  1415.     break;}
  1416. case 56:
  1417. #line 481 "yacc.y"
  1418. { yyval.name_list = yyvsp[-1].name_list; ;
  1419.     break;}
  1420. case 57:
  1421. #line 485 "yacc.y"
  1422.            yyval.name_list = new NameList(1);
  1423.            yyval.name_list->append(new Name(yyvsp[0].name));
  1424.            if (!FormalParam->insert(*yyvsp[0].name, nthParam++))
  1425.              yyerror("Parameter " + *yyvsp[0].name + " already used");
  1426.  
  1427.            delete yyvsp[0].name;
  1428.          ;
  1429.     break;}
  1430. case 58:
  1431. #line 494 "yacc.y"
  1432.            yyval.name_list = yyvsp[-2].name_list;
  1433.            yyval.name_list->append(new Name(yyvsp[0].name));
  1434.            if (!FormalParam->insert(*yyvsp[0].name, nthParam++))
  1435.              yyerror("Parameter " + *yyvsp[0].name + " already used");
  1436.  
  1437.            delete yyvsp[0].name;
  1438.          ;
  1439.     break;}
  1440. case 59:
  1441. #line 505 "yacc.y"
  1442. { yyval.expr = yyvsp[0].expr->simplify(); ;
  1443.     break;}
  1444. case 60:
  1445. #line 509 "yacc.y"
  1446. {
  1447.            yyval.succ_list = new SuccessorList(1);
  1448.            yyval.succ_list->append(yyvsp[0].successor);
  1449.          ;
  1450.     break;}
  1451. case 61:
  1452. #line 514 "yacc.y"
  1453.            yyval.succ_list = yyvsp[-1].succ_list;
  1454.            yyval.succ_list->append(yyvsp[0].successor);
  1455.          ;
  1456.     break;}
  1457. case 62:
  1458. #line 521 "yacc.y"
  1459. {
  1460.            yyval.successor = new Successor(yyvsp[-1].realnumber, yyvsp[0].module_list);
  1461.          ;
  1462.     break;}
  1463. case 63:
  1464. #line 525 "yacc.y"
  1465. {
  1466.            yyval.successor = new Successor(yyvsp[0].realnumber, NULL);
  1467.          ;
  1468.     break;}
  1469. case 64:
  1470. #line 530 "yacc.y"
  1471. { yyval.realnumber = 1.0; ;
  1472.     break;}
  1473. case 65:
  1474. #line 531 "yacc.y"
  1475. { yyval.realnumber = *yyvsp[-1].value;
  1476.                   delete yyvsp[-1].value;
  1477.                 ;
  1478.     break;}
  1479. case 66:
  1480. #line 537 "yacc.y"
  1481. {
  1482.            yyval.module_list = new ProdModuleList(1);
  1483.            yyval.module_list->append(yyvsp[0].module);
  1484.          ;
  1485.     break;}
  1486. case 67:
  1487. #line 542 "yacc.y"
  1488. {
  1489.            yyval.module_list = yyvsp[-1].module_list;
  1490.            yyval.module_list->append(yyvsp[0].module);
  1491.          ;
  1492.     break;}
  1493. case 68:
  1494. #line 549 "yacc.y"
  1495. {
  1496.            yyval.module = new ProdModule(Name(yyvsp[0].name), NULL);
  1497.            delete yyvsp[0].name;
  1498.          ;
  1499.     break;}
  1500. case 69:
  1501. #line 554 "yacc.y"
  1502. {
  1503.            yyval.module = new ProdModule(Name(yyvsp[-3].name), yyvsp[-1].expr_list);
  1504.            delete yyvsp[-3].name;
  1505.          ;
  1506.     break;}
  1507. case 70:
  1508. #line 561 "yacc.y"
  1509. {
  1510.            yyval.expr_list = new ExpressionList(1);
  1511.            yyval.expr_list->append(yyvsp[0].expr->simplify());
  1512.          ;
  1513.     break;}
  1514. case 71:
  1515. #line 566 "yacc.y"
  1516. {
  1517.            yyvsp[-2].expr_list->append(yyvsp[0].expr->simplify());
  1518.            yyval.expr_list = yyvsp[-2].expr_list;
  1519.          ;
  1520.     break;}
  1521. case 72:
  1522. #line 572 "yacc.y"
  1523. { yyval.expr = new Expression(new ValueItem(yyvsp[0].value));
  1524.               delete yyvsp[0].value;
  1525.             ;
  1526.     break;}
  1527. case 73:
  1528. #line 576 "yacc.y"
  1529. { yyval.expr = new Expression(new Variable(Name("tx"),
  1530.                           Interpreter::getTx())); 
  1531.          ;
  1532.     break;}
  1533. case 74:
  1534. #line 580 "yacc.y"
  1535. { yyval.expr = new Expression(new Variable(Name("ty"), 
  1536.                           Interpreter::getTy())); ;
  1537.     break;}
  1538. case 75:
  1539. #line 583 "yacc.y"
  1540. { yyval.expr = new Expression(new Variable(Name("tz"), 
  1541.                           Interpreter::getTz())); ;
  1542.     break;}
  1543. case 76:
  1544. #line 586 "yacc.y"
  1545. { Expression *expr;
  1546.            int nth;
  1547.            
  1548.            // a formal parameter, local or global constant ?
  1549.            if (!FormalParam->lookup(*yyvsp[0].name, nth)) {
  1550.              if (!LocalConst->lookup(*yyvsp[0].name, expr)) {
  1551.                if (!GlobalConst.lookup(*yyvsp[0].name, expr))
  1552.              yyerror("`" + *yyvsp[0].name + "' unknown");
  1553.                else
  1554.              yyval.expr = new Expression(*expr);
  1555.              }
  1556.              else
  1557.                yyval.expr = new Expression(*expr);
  1558.            }
  1559.            else
  1560.              yyval.expr = new Expression(new Variable(Name(yyvsp[0].name), 
  1561.                               Formals(nth)));
  1562.            delete yyvsp[0].name;
  1563.          ;
  1564.     break;}
  1565. case 77:
  1566. #line 606 "yacc.y"
  1567. {
  1568.            Expression *expr;
  1569.  
  1570.            if (!GlobalConst.lookup(*yyvsp[0].name, expr))
  1571.              yyerror("::" + *yyvsp[0].name + " unknown");
  1572.            else
  1573.              yyval.expr = new Expression(*expr);
  1574.  
  1575.            delete yyvsp[0].name;
  1576.          ;
  1577.     break;}
  1578. case 78:
  1579. #line 617 "yacc.y"
  1580. { yyval.expr = new Expression(new Or,  yyvsp[-2].expr, yyvsp[0].expr); ;
  1581.     break;}
  1582. case 79:
  1583. #line 619 "yacc.y"
  1584. { yyval.expr = new Expression(new And, yyvsp[-2].expr, yyvsp[0].expr); ;
  1585.     break;}
  1586. case 80:
  1587. #line 621 "yacc.y"
  1588. { yyval.expr = new Expression(new Eq,  yyvsp[-2].expr, yyvsp[0].expr); ;
  1589.     break;}
  1590. case 81:
  1591. #line 623 "yacc.y"
  1592. { yyval.expr = new Expression(new Neq, yyvsp[-2].expr, yyvsp[0].expr); ;
  1593.     break;}
  1594. case 82:
  1595. #line 625 "yacc.y"
  1596. { yyval.expr = new Expression(new Geq, yyvsp[-2].expr, yyvsp[0].expr); ;
  1597.     break;}
  1598. case 83:
  1599. #line 627 "yacc.y"
  1600. { yyval.expr = new Expression(new Leq, yyvsp[-2].expr, yyvsp[0].expr); ;
  1601.     break;}
  1602. case 84:
  1603. #line 629 "yacc.y"
  1604. { yyval.expr = new Expression(new Gt,  yyvsp[-2].expr, yyvsp[0].expr); ;
  1605.     break;}
  1606. case 85:
  1607. #line 631 "yacc.y"
  1608. { yyval.expr = new Expression(new Lt,  yyvsp[-2].expr, yyvsp[0].expr); ;
  1609.     break;}
  1610. case 86:
  1611. #line 633 "yacc.y"
  1612. { yyval.expr = new Expression(new Not,  yyvsp[0].expr); ;
  1613.     break;}
  1614. case 87:
  1615. #line 636 "yacc.y"
  1616. { yyval.expr = new Expression(new Add, yyvsp[-2].expr, yyvsp[0].expr); ;
  1617.     break;}
  1618. case 88:
  1619. #line 638 "yacc.y"
  1620. { yyval.expr = new Expression(new Sub, yyvsp[-2].expr, yyvsp[0].expr); ;
  1621.     break;}
  1622. case 89:
  1623. #line 640 "yacc.y"
  1624. { yyval.expr = new Expression(new Mul, yyvsp[-2].expr, yyvsp[0].expr); ;
  1625.     break;}
  1626. case 90:
  1627. #line 642 "yacc.y"
  1628. { yyval.expr = new Expression(new Div, yyvsp[-2].expr, yyvsp[0].expr); ;
  1629.     break;}
  1630. case 91:
  1631. #line 644 "yacc.y"
  1632. { yyval.expr = new Expression(new Mod, yyvsp[-2].expr, yyvsp[0].expr); ;
  1633.     break;}
  1634. case 92:
  1635. #line 646 "yacc.y"
  1636. { yyval.expr = new Expression(new Pow, yyvsp[-2].expr, yyvsp[0].expr); ;
  1637.     break;}
  1638. case 93:
  1639. #line 648 "yacc.y"
  1640. { yyval.expr = new Expression(new Pow, yyvsp[-2].expr, yyvsp[0].expr); ;
  1641.     break;}
  1642. case 94:
  1643. #line 650 "yacc.y"
  1644. { yyval.expr = new Expression(new Uminus,  yyvsp[0].expr); ;
  1645.     break;}
  1646. case 95:
  1647. #line 653 "yacc.y"
  1648. { yyval.expr = new Expression(new Sin, yyvsp[0].expr); ;
  1649.     break;}
  1650. case 96:
  1651. #line 655 "yacc.y"
  1652. { yyval.expr = new Expression(new Cos, yyvsp[0].expr); ;
  1653.     break;}
  1654. case 97:
  1655. #line 657 "yacc.y"
  1656. { yyval.expr = new Expression(new Tan, yyvsp[0].expr); ;
  1657.     break;}
  1658. case 98:
  1659. #line 659 "yacc.y"
  1660. { yyval.expr = new Expression(new Asin, yyvsp[0].expr); ;
  1661.     break;}
  1662. case 99:
  1663. #line 661 "yacc.y"
  1664. { yyval.expr = new Expression(new Acos, yyvsp[0].expr); ;
  1665.     break;}
  1666. case 100:
  1667. #line 663 "yacc.y"
  1668. { yyval.expr = new Expression(new Atan, yyvsp[0].expr); ;
  1669.     break;}
  1670. case 101:
  1671. #line 665 "yacc.y"
  1672. { yyval.expr = new Expression(new Abs, yyvsp[0].expr); ;
  1673.     break;}
  1674. case 102:
  1675. #line 667 "yacc.y"
  1676. { yyval.expr = new Expression(new Sqrt, yyvsp[0].expr); ;
  1677.     break;}
  1678. case 103:
  1679. #line 669 "yacc.y"
  1680. { yyval.expr = new Expression(new Exp, yyvsp[0].expr); ;
  1681.     break;}
  1682. case 104:
  1683. #line 671 "yacc.y"
  1684. { yyval.expr = new Expression(new Log, yyvsp[0].expr); ;
  1685.     break;}
  1686. case 105:
  1687. #line 673 "yacc.y"
  1688. { yyval.expr = new Expression(new Log, yyvsp[0].expr); ;
  1689.     break;}
  1690. case 106:
  1691. #line 675 "yacc.y"
  1692. { yyval.expr = new Expression(new Rand); ;
  1693.     break;}
  1694. case 107:
  1695. #line 677 "yacc.y"
  1696. { yyval.expr = new Expression(new Gauss); ;
  1697.     break;}
  1698. case 108:
  1699. #line 679 "yacc.y"
  1700. { yyval.expr = new Expression(new If, yyvsp[-5].expr, yyvsp[-3].expr, yyvsp[-1].expr); ;
  1701.     break;}
  1702. case 109:
  1703. #line 681 "yacc.y"
  1704.            yyerror("Function " + *yyvsp[-1].name + "() unknown"); 
  1705.          ;
  1706.     break;}
  1707. case 110:
  1708. #line 685 "yacc.y"
  1709.            yyerror("Function " + *yyvsp[-3].name + "(arguments) unknown"); 
  1710.          ;
  1711.     break;}
  1712. case 111:
  1713. #line 689 "yacc.y"
  1714. { yyval.expr = yyvsp[-1].expr; ;
  1715.     break;}
  1716. case 112:
  1717. #line 693 "yacc.y"
  1718. { yyval.expr = NULL; ;
  1719.     break;}
  1720. case 113:
  1721. #line 696 "yacc.y"
  1722. { yyval.expr = yyvsp[-1].expr->simplify(); ;
  1723.     break;}
  1724. case 117:
  1725. #line 707 "yacc.y"
  1726. { derivation = yyvsp[-1].derivations; ;
  1727.     break;}
  1728. case 118:
  1729. #line 709 "yacc.y"
  1730. { axiom = yyvsp[-1].module_list; ;
  1731.     break;}
  1732. case 119:
  1733. #line 711 "yacc.y"
  1734.            theOptions.defaultPitch = dtor(yyvsp[-1].expr->evaluate());
  1735.            delete yyvsp[-1].expr;
  1736.          ;
  1737.     break;}
  1738. case 120:
  1739. #line 716 "yacc.y"
  1740. { theOptions.defaultRoll = dtor(yyvsp[-1].expr->evaluate());
  1741.            delete yyvsp[-1].expr;
  1742.          ;
  1743.     break;}
  1744. case 121:
  1745. #line 720 "yacc.y"
  1746.            theOptions.defaultTurn = dtor(yyvsp[-1].expr->evaluate());
  1747.            delete yyvsp[-1].expr;
  1748.          ;
  1749.     break;}
  1750. case 122:
  1751. #line 725 "yacc.y"
  1752.            theOptions.defaultPitch = 
  1753.            theOptions.defaultRoll  = 
  1754.            theOptions.defaultTurn  =  dtor(yyvsp[-1].expr->evaluate());
  1755.            delete yyvsp[-1].expr;
  1756.          ;
  1757.     break;}
  1758. case 123:
  1759. #line 732 "yacc.y"
  1760.            theOptions.defaultForward = yyvsp[-1].expr->evaluate();
  1761.            delete yyvsp[-1].expr;
  1762.          ;
  1763.     break;}
  1764. case 124:
  1765. #line 737 "yacc.y"
  1766.            long now;
  1767.  
  1768. /*
  1769.  * #if defined(_AIX)
  1770.  *              stime(&now);
  1771.  * #elif defined(__DECCXX)
  1772.  */
  1773.  
  1774. #if defined(__DECCXX)
  1775.            now = getpid();
  1776. #else
  1777.              time(&now);
  1778. #endif
  1779.            if (theOptions.verbose) 
  1780.              cerr << "randomize " << now << "\n";
  1781.            srand48(now);
  1782.          ;
  1783.     break;}
  1784. case 125:
  1785. #line 756 "yacc.y"
  1786.            srand48((long)yyvsp[-1].expr->evaluate()); 
  1787.            delete yyvsp[-1].expr;
  1788.          ;
  1789.     break;}
  1790. case 126:
  1791. #line 761 "yacc.y"
  1792.            theOptions.tropismX = yyvsp[-5].expr->simplify();
  1793.            theOptions.tropismY = yyvsp[-3].expr->simplify();
  1794.            theOptions.tropismZ = yyvsp[-1].expr->simplify();
  1795.          ;
  1796.     break;}
  1797. case 127:
  1798. #line 767 "yacc.y"
  1799.            theOptions.weight = yyvsp[-1].expr->simplify();
  1800.          ;
  1801.     break;}
  1802. case 128:
  1803. #line 771 "yacc.y"
  1804. {
  1805.            theOptions.autoscale = 0;
  1806.            theOptions.eye = 
  1807.              Vector(yyvsp[-5].expr->evaluate(), yyvsp[-3].expr->evaluate(), yyvsp[-1].expr->evaluate());
  1808.            delete yyvsp[-5].expr; delete yyvsp[-3].expr; delete yyvsp[-1].expr;
  1809.          ;
  1810.     break;}
  1811. case 129:
  1812. #line 778 "yacc.y"
  1813. {
  1814.            theOptions.autoscale = 0;
  1815.            theOptions.lookat = 
  1816.              Vector(yyvsp[-5].expr->evaluate(), yyvsp[-3].expr->evaluate(), yyvsp[-1].expr->evaluate());
  1817.            delete yyvsp[-5].expr; delete yyvsp[-3].expr; delete yyvsp[-1].expr;
  1818.          ;
  1819.     break;}
  1820. case 130:
  1821. #line 785 "yacc.y"
  1822. {
  1823.            theOptions.up = 
  1824.              Vector(yyvsp[-5].expr->evaluate(), yyvsp[-3].expr->evaluate(), yyvsp[-1].expr->evaluate());
  1825.            delete yyvsp[-5].expr; delete yyvsp[-3].expr; delete yyvsp[-1].expr;
  1826.          ;
  1827.     break;}
  1828. case 131:
  1829. #line 791 "yacc.y"
  1830. {
  1831.            theOptions.fov = yyvsp[-1].expr->evaluate();
  1832.            delete yyvsp[-1].expr;
  1833.          ;
  1834.     break;}
  1835. case 132:
  1836. #line 796 "yacc.y"
  1837. {
  1838.            theOptions.coneResolution = (int) *yyvsp[-1].value;
  1839.            delete yyvsp[-1].value;
  1840.          ;
  1841.     break;}
  1842. case 133:
  1843. #line 801 "yacc.y"
  1844. {
  1845.            theOptions.sphereResolution = (int) *yyvsp[-1].value;
  1846.            delete yyvsp[-1].value;
  1847.          ;
  1848.     break;}
  1849. case 134:
  1850. #line 808 "yacc.y"
  1851. { Table *t;
  1852.  
  1853.            if (!theTables.lookup(*yyvsp[-1].name, t))
  1854.              yyerror("Unknown table " + *yyvsp[-1].name);
  1855.            else {
  1856.              yyval.derivations = new DerivationList(1);
  1857.              yyval.derivations->append(new DerivationItem(t,yyvsp[0].intnumber));
  1858.            }
  1859.            delete yyvsp[-1].name;
  1860.          ;
  1861.     break;}
  1862. case 135:
  1863. #line 819 "yacc.y"
  1864. { Table *t;
  1865.  
  1866.            yyval.derivations = yyvsp[-3].derivations;
  1867.            if (!theTables.lookup(*yyvsp[-1].name, t))
  1868.              yyerror("Unknown table " + *yyvsp[-1].name);
  1869.            else
  1870.              yyval.derivations->append(new DerivationItem(t,yyvsp[0].intnumber));
  1871.  
  1872.            delete yyvsp[-1].name;
  1873.          ;
  1874.     break;}
  1875. case 136:
  1876. #line 832 "yacc.y"
  1877. { yyval.intnumber = 1; ;
  1878.     break;}
  1879. case 137:
  1880. #line 834 "yacc.y"
  1881. { yyval.intnumber = (int) real(yyvsp[-1].expr->evaluate());
  1882.            delete yyvsp[-1].expr;
  1883.          ;
  1884.     break;}
  1885. case 138:
  1886. #line 838 "yacc.y"
  1887. { yyval.intnumber = -1; ;
  1888.     break;}
  1889. case 139:
  1890. #line 841 "yacc.y"
  1891. { yyerrok; ;
  1892.     break;}
  1893. case 140:
  1894. #line 842 "yacc.y"
  1895. { yyerrok; ;
  1896.     break;}
  1897. }
  1898.    /* the action file gets copied in in place of this dollarsign */
  1899. #line 440 "/usr/local/lib/bison/bison.simple"
  1900.  
  1901.   yyvsp -= yylen;
  1902.   yyssp -= yylen;
  1903. #ifdef YYLSP_NEEDED
  1904.   yylsp -= yylen;
  1905. #endif
  1906.  
  1907. #if YYDEBUG != 0
  1908.   if (yydebug)
  1909.     {
  1910.       short *ssp1 = yyss - 1;
  1911.       fprintf (stderr, "state stack now");
  1912.       while (ssp1 != yyssp)
  1913.     fprintf (stderr, " %d", *++ssp1);
  1914.       fprintf (stderr, "\n");
  1915.     }
  1916. #endif
  1917.  
  1918.   *++yyvsp = yyval;
  1919.  
  1920. #ifdef YYLSP_NEEDED
  1921.   yylsp++;
  1922.   if (yylen == 0)
  1923.     {
  1924.       yylsp->first_line = yylloc.first_line;
  1925.       yylsp->first_column = yylloc.first_column;
  1926.       yylsp->last_line = (yylsp-1)->last_line;
  1927.       yylsp->last_column = (yylsp-1)->last_column;
  1928.       yylsp->text = 0;
  1929.     }
  1930.   else
  1931.     {
  1932.       yylsp->last_line = (yylsp+yylen-1)->last_line;
  1933.       yylsp->last_column = (yylsp+yylen-1)->last_column;
  1934.     }
  1935. #endif
  1936.  
  1937.   /* Now "shift" the result of the reduction.
  1938.      Determine what state that goes to,
  1939.      based on the state we popped back to
  1940.      and the rule number reduced by.  */
  1941.  
  1942.   yyn = yyr1[yyn];
  1943.  
  1944.   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
  1945.   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
  1946.     yystate = yytable[yystate];
  1947.   else
  1948.     yystate = yydefgoto[yyn - YYNTBASE];
  1949.  
  1950.   goto yynewstate;
  1951.  
  1952. yyerrlab:   /* here on detecting error */
  1953.  
  1954.   if (! yyerrstatus)
  1955.     /* If not already recovering from an error, report this error.  */
  1956.     {
  1957.       ++yynerrs;
  1958.  
  1959. #ifdef YYERROR_VERBOSE
  1960.       yyn = yypact[yystate];
  1961.  
  1962.       if (yyn > YYFLAG && yyn < YYLAST)
  1963.     {
  1964.       int size = 0;
  1965.       char *msg;
  1966.       int x, count;
  1967.  
  1968.       count = 0;
  1969.       for (x = 0; x < (sizeof(yytname) / sizeof(char *)); x++)
  1970.         if (yycheck[x + yyn] == x)
  1971.           size += strlen(yytname[x]) + 15, count++;
  1972.       msg = (char *) malloc(size + 15);
  1973.       if (msg != 0)
  1974.         {
  1975.           strcpy(msg, "parse error");
  1976.  
  1977.           if (count < 5)
  1978.         {
  1979.           count = 0;
  1980.           for (x = 0; x < (sizeof(yytname) / sizeof(char *)); x++)
  1981.             if (yycheck[x + yyn] == x)
  1982.               {
  1983.             strcat(msg, count == 0 ? ", expecting `" : " or `");
  1984.             strcat(msg, yytname[x]);
  1985.             strcat(msg, "'");
  1986.             count++;
  1987.               }
  1988.         }
  1989.           yyerror(msg);
  1990.           free(msg);
  1991.         }
  1992.       else
  1993.         yyerror ("parse error; also virtual memory exceeded");
  1994.     }
  1995.       else
  1996. #endif /* YYERROR_VERBOSE */
  1997.     yyerror("parse error");
  1998.     }
  1999.  
  2000. yyerrlab1:   /* here on error raised explicitly by an action */
  2001.  
  2002.   if (yyerrstatus == 3)
  2003.     {
  2004.       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
  2005.  
  2006.       /* return failure if at end of input */
  2007.       if (yychar == YYEOF)
  2008.     YYABORT;
  2009.  
  2010. #if YYDEBUG != 0
  2011.       if (yydebug)
  2012.     fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
  2013. #endif
  2014.  
  2015.       yychar = YYEMPTY;
  2016.     }
  2017.  
  2018.   /* Else will try to reuse lookahead token
  2019.      after shifting the error token.  */
  2020.  
  2021.   yyerrstatus = 3;        /* Each real token shifted decrements this */
  2022.  
  2023.   goto yyerrhandle;
  2024.  
  2025. yyerrdefault:  /* current state does not do anything special for the error token. */
  2026.  
  2027. #if 0
  2028.   /* This is wrong; only states that explicitly want error tokens
  2029.      should shift them.  */
  2030.   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
  2031.   if (yyn) goto yydefault;
  2032. #endif
  2033.  
  2034. yyerrpop:   /* pop the current state because it cannot handle the error token */
  2035.  
  2036.   if (yyssp == yyss) YYABORT;
  2037.   yyvsp--;
  2038.   yystate = *--yyssp;
  2039. #ifdef YYLSP_NEEDED
  2040.   yylsp--;
  2041. #endif
  2042.  
  2043. #if YYDEBUG != 0
  2044.   if (yydebug)
  2045.     {
  2046.       short *ssp1 = yyss - 1;
  2047.       fprintf (stderr, "Error: state stack now");
  2048.       while (ssp1 != yyssp)
  2049.     fprintf (stderr, " %d", *++ssp1);
  2050.       fprintf (stderr, "\n");
  2051.     }
  2052. #endif
  2053.  
  2054. yyerrhandle:
  2055.  
  2056.   yyn = yypact[yystate];
  2057.   if (yyn == YYFLAG)
  2058.     goto yyerrdefault;
  2059.  
  2060.   yyn += YYTERROR;
  2061.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
  2062.     goto yyerrdefault;
  2063.  
  2064.   yyn = yytable[yyn];
  2065.   if (yyn < 0)
  2066.     {
  2067.       if (yyn == YYFLAG)
  2068.     goto yyerrpop;
  2069.       yyn = -yyn;
  2070.       goto yyreduce;
  2071.     }
  2072.   else if (yyn == 0)
  2073.     goto yyerrpop;
  2074.  
  2075.   if (yyn == YYFINAL)
  2076.     YYACCEPT;
  2077.  
  2078. #if YYDEBUG != 0
  2079.   if (yydebug)
  2080.     fprintf(stderr, "Shifting error token, ");
  2081. #endif
  2082.  
  2083.   *++yyvsp = yylval;
  2084. #ifdef YYLSP_NEEDED
  2085.   *++yylsp = yylloc;
  2086. #endif
  2087.  
  2088.   yystate = yyn;
  2089.   goto yynewstate;
  2090. }
  2091. #line 845 "yacc.y"
  2092.  
  2093.  
  2094.